home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1997-10-26 | 14.5 KB | 992 lines |
- (*----------------------------------------------------------------------*
- * *
- * MAGIC Modula's All purpose GEM Interface Cadre *
- * ÿ ÿ ÿ ÿ ÿ *
- *----------------------------------------------------------------------*
- * Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
- *----------------------------------------------------------------------*
- * Dieses Modul ist urheberrechtlich geschtzt. *
- * *
- * Die Verffentlichung des Quelltextes oder Teilen daraus in schrift- *
- * licher Form, insbesondere in Zeitschriften, sowie die Verbreitung *
- * ber Public-Domain-Hndler bedarf der ausdrcklichen schriftlichen *
- * Genehmigung des Autors! *
- * *
- * Der Autor gibt hiermit die ausdrckliche Erlaubnis, das Modul jeder- *
- * zeit auch im Quelltext weiterzugegeben, sofern dessen Text und ins- *
- * besondere dieser Urheberrechts-Vermerk nicht verndert wird, und *
- * durch die Weitergabe kein finanzieller Nutzen entsteht. Der Autor *
- * behlt sich das Recht vor, diese Erlaubnis jederzeit u. ohne Angaben *
- * von Grnden zu widerrufen. *
- *----------------------------------------------------------------------*)
-
- IMPLEMENTATION MODULE MagicDOS;
-
- (*----------------------------------------------------------------------*
- * Int. Vers | Datum | Name | nderung *
- *-----------+----------+------+----------------------------------------*
- * 3.00 | 18.01.92 | Hp | *
- *-----------+----------+------+----------------------------------------*)
-
-
-
- (* IMPLEMENTATION FR >>> Megamax-Modula-2 <<< *)
- (* *)
- (*$R- Range-Checks *)
- (*$S- Stack-Check *)
- (* *)
- (*----------------------------------------------*)
-
-
-
-
-
-
- FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
- Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
- Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
- sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
- CastToChar, CastToByte, CastToByteset, CastToInt,
- CastToCard, CastToBitset, CastToWord, CastToLInt,
- CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
- TosVersion, Accessory, Basepage, SysHeader, TosDate;
-
-
-
-
-
-
- IMPORT MagicSys;
-
-
- FROM SYSTEM IMPORT ADDRESS, ADR, WORD, ASSEMBLER;
-
- VAR lc: lCARDINAL;
- li: lINTEGER;
- lb: lBITSET;
- i: sINTEGER;
- c: sCARDINAL;
- s: sBITSET;
- a: ADDRESS;
- x: sCARDINAL;
-
-
-
-
-
- PROCEDURE Pterm0;
- BEGIN
-
- ASSEMBLER
- MOVE.W #0, -(SP)
- TRAP #1
- END;
-
-
-
-
- END Pterm0;
-
- PROCEDURE Cconin (): lCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #1, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.L D0, lc
- END;
- RETURN lc;
-
-
-
-
- END Cconin;
-
- PROCEDURE Cconout (ch: CHAR);
- BEGIN
-
- x:= ORD(ch);
- ASSEMBLER
- MOVE.W x, -(SP)
- MOVE.W #2, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Cconout;
-
- PROCEDURE Cauxin (): sCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #3, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c;
-
-
-
-
- END Cauxin;
-
- PROCEDURE Cauxout (ch: CHAR);
- BEGIN
-
- x:= ORD (ch);
- ASSEMBLER
- MOVE.W x, -(SP)
- MOVE.W #4, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Cauxout;
-
- PROCEDURE Cprnout (ch: CHAR);
- BEGIN
-
- x:= ORD (ch);
- ASSEMBLER
- MOVE.W x, -(SP)
- MOVE.W #5, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Cprnout;
-
- PROCEDURE Crawio (ch: CHAR): lCARDINAL;
- BEGIN
-
- x:= ORD (ch);
- ASSEMBLER
- MOVE.W x, -(SP)
- MOVE.W #6, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- MOVE.L D0, lc
- END;
- RETURN lc;
-
-
-
-
- END Crawio;
-
- PROCEDURE Crawin (): lCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #7, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.L D0, lc
- END;
- RETURN lc;
-
-
-
-
- END Crawin;
-
- PROCEDURE Cnecin (): lCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #8, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.L D0, lc
- END;
- RETURN lc;
-
-
-
-
- END Cnecin;
-
- PROCEDURE Cconws (REF string: ARRAY OF CHAR);
- BEGIN
-
- ASSEMBLER
- MOVE.L string(A6), -(SP)
- MOVE.W #9, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Cconws;
-
- PROCEDURE Cconrs (VAR string: ARRAY OF CHAR);
- BEGIN
-
- ASSEMBLER
- MOVE.L string(A6), -(SP)
- MOVE.W #10, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Cconrs;
-
- PROCEDURE Cconis (): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.W #11, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, x
- END;
- RETURN x # 0;
-
-
-
-
- END Cconis;
-
- PROCEDURE Dsetdrv (drive: sCARDINAL; VAR drvmap: lBITSET);
- BEGIN
-
- ASSEMBLER
- MOVE.W drive(A6), -(SP)
- MOVE.W #14, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- MOVE.L D0, lb
- END;
- drvmap:= lb;
-
-
-
-
- END Dsetdrv;
-
- PROCEDURE Cconos (): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.W #16, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c # 0;
-
-
-
-
- END Cconos;
-
- PROCEDURE Cprnos (): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.W #17, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c # 0;
-
-
-
-
- END Cprnos;
-
- PROCEDURE Cauxis (): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.W #18, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c # 0;
-
-
-
-
- END Cauxis;
-
- PROCEDURE Cauxos (): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.W #19, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c # 0;
-
-
-
-
- END Cauxos;
-
- PROCEDURE Dgetdrv (): sCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #25, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c;
-
-
-
-
- END Dgetdrv;
-
- PROCEDURE Fsetdta (dta: ADDRESS);
- BEGIN
-
- ASSEMBLER
- MOVE.L dta(A6), -(SP)
- MOVE.W #26, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- END;
-
-
-
-
- END Fsetdta;
-
- PROCEDURE Super (VAR stack: ADDRESS);
- BEGIN
-
- a:= stack;
- ASSEMBLER
- MOVE.L a, -(SP)
- MOVE.W #32, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.L D0, a
- END;
- stack:= a;
-
-
-
-
- END Super;
-
- PROCEDURE Tgetdate (): sCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #42, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c;
-
-
-
-
- END Tgetdate;
-
- PROCEDURE Tsetdate (date: sCARDINAL);
- BEGIN
-
- c:= date;
- ASSEMBLER
- MOVE.W c, -(SP)
- MOVE.W #43, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Tsetdate;
-
- PROCEDURE Tgettime (): sCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #44, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c;
-
-
-
-
- END Tgettime;
-
- PROCEDURE Tsettime (time: sCARDINAL);
- BEGIN
-
- c:= time;
- ASSEMBLER
- MOVE.W c, -(SP)
- MOVE.W #45, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- END;
-
-
-
-
- END Tsettime;
-
- PROCEDURE Fgetdta (): ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.W #47, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.L D0, a
- END;
- RETURN a;
-
-
-
-
- END Fgetdta;
-
- PROCEDURE Sversion (): sCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W #48, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, c
- END;
- RETURN c;
-
-
-
-
- END Sversion;
-
- PROCEDURE Ptermres (keep: lCARDINAL; return: sCARDINAL);
- BEGIN
-
- c:= return; lc:= keep;
- ASSEMBLER
- MOVE.W c, -(SP)
- MOVE.L lc, -(SP)
- MOVE.W #49, -(SP)
- TRAP #1
- END;
-
-
-
-
- END Ptermres;
-
- PROCEDURE Dfree (VAR dib: ARRAY OF LOC; drive: sCARDINAL);
- BEGIN
-
- c:= drive;
- ASSEMBLER
- MOVE.W c, -(SP)
- MOVE.L dib(A6), -(SP)
- MOVE.W #54, -(SP)
- TRAP #1
- ADDQ.L #8, SP
- END;
-
-
-
-
- END Dfree;
-
- PROCEDURE Dcreate (REF pfad: ARRAY OF CHAR): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L pfad(A6), -(SP)
- MOVE.W #57, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Dcreate;
-
- PROCEDURE Ddelete (REF pfad: ARRAY OF CHAR): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L pfad(A6), -(SP)
- MOVE.W #58, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Ddelete;
-
- PROCEDURE Dsetpath (REF pfad: ARRAY OF CHAR): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L pfad(A6), -(SP)
- MOVE.W #59, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Dsetpath;
-
- PROCEDURE Fcreate (REF name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W attr(A6), -(SP)
- MOVE.L name(A6), -(SP)
- MOVE.W #60, -(SP)
- TRAP #1
- ADDQ.L #8, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Fcreate;
-
- PROCEDURE Fopen (REF name: ARRAY OF CHAR; mode: sBITSET): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W mode(A6), -(SP)
- MOVE.L name(A6), -(SP)
- MOVE.W #61, -(SP)
- TRAP #1
- ADDQ.L #8, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Fopen;
-
- PROCEDURE Fclose (handle: sINTEGER): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W handle(A6), -(SP)
- MOVE.W #62, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Fclose;
-
- PROCEDURE Fread (handle: sINTEGER; VAR count: lCARDINAL; buffer: ADDRESS);
- BEGIN
-
- lc:= count;
- ASSEMBLER
- MOVE.L buffer(A6), -(SP)
- MOVE.L lc, -(SP)
- MOVE.W handle(A6), -(SP)
- MOVE.W #63, -(SP)
- TRAP #1
- LEA $C(SP), SP
- MOVE.L D0, lc
- END;
- count:= lc;
-
-
-
-
- END Fread;
-
- PROCEDURE Fwrite (handle: sINTEGER; VAR count: lCARDINAL; buffer: ADDRESS);
- BEGIN
-
- lc:= count;
- ASSEMBLER
- MOVE.L buffer(A6), -(SP)
- MOVE.L lc, -(SP)
- MOVE.W handle(A6), -(SP)
- MOVE.W #64, -(SP)
- TRAP #1
- LEA $C(SP), SP
- MOVE.L D0, lc
- END;
- count:= lc;
-
-
-
-
- END Fwrite;
-
- PROCEDURE Fdelete (REF name: ARRAY OF CHAR): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.L name(A6), -(SP)
- MOVE.W #65, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.W D0, x
- END;
- RETURN x = 0;
-
-
-
-
- END Fdelete;
-
- PROCEDURE Fseek (offset: lINTEGER; handle, mode: sINTEGER): lCARDINAL;
- BEGIN
-
- ASSEMBLER
- MOVE.W mode(A6), -(SP)
- MOVE.W handle(A6), -(SP)
- MOVE.L offset(A6), -(SP)
- MOVE.W #66, -(SP)
- TRAP #1
- LEA $A(SP), SP
- MOVE.L D0, lc
- END;
- RETURN lc;
-
-
-
-
- END Fseek;
-
- PROCEDURE Fattrib (REF name: ARRAY OF CHAR; set: BOOLEAN; VAR attr: sBITSET);
- BEGIN
- IF set THEN c:= 1; ELSE c:= 0; END;
-
- s := attr;
- ASSEMBLER
- MOVE.W s, -(SP)
- MOVE.W c, -(SP)
- MOVE.L name(A6), -(SP)
- MOVE.W #67, -(SP)
- TRAP #1
- LEA $A(SP), SP
- MOVE.W D0, s
- END;
- attr:= s;
-
-
-
-
- END Fattrib;
-
- PROCEDURE Fdup (handle: sINTEGER): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W handle(A6), -(SP)
- MOVE.W #69, -(SP)
- TRAP #1
- ADDQ.L #4, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Fdup;
-
- PROCEDURE Fforce (std, nonstd: sINTEGER): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.W nonstd(A6), -(SP)
- MOVE.W std(A6), -(SP)
- MOVE.W #70, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.W D0, x
- END;
- RETURN x # 0;
-
-
-
-
- END Fforce;
-
- PROCEDURE Dgetpath (VAR pfad: ARRAY OF CHAR; drive: sCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.W drive(A6), -(SP)
- MOVE.L pfad(A6), -(SP)
- MOVE.W #71, -(SP)
- TRAP #1
- ADDQ.L #8, SP
- END;
-
-
-
-
- END Dgetpath;
-
- PROCEDURE Malloc (bytes: lCARDINAL): ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.L bytes(A6), -(SP)
- MOVE.W #72, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.L D0, a
- END;
- RETURN a;
-
-
-
-
- END Malloc;
-
- PROCEDURE Mfree (addr: ADDRESS): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.L addr(A6), -(SP)
- MOVE.W #73, -(SP)
- TRAP #1
- ADDQ.L #6, SP
- MOVE.W D0, x
- END;
- RETURN x = 0;
-
-
-
-
- END Mfree;
-
- PROCEDURE Mshrink (addr: ADDRESS; newSize: lCARDINAL): BOOLEAN;
- BEGIN
-
- ASSEMBLER
- MOVE.L newSize(A6), -(SP)
- MOVE.L addr(A6), -(SP)
- MOVE.W #0, -(SP)
- MOVE.W #74, -(SP)
- TRAP #1
- LEA $C(SP), SP
- MOVE.W D0, x
- END;
- RETURN x = 0;
-
-
-
-
- END Mshrink;
-
- PROCEDURE Pexec (mode: sCARDINAL; VAR name, tail, env: ARRAY OF CHAR): sINTEGER;
- BEGIN
-
- IF env[0] = 0C THEN a:= ADDRESS(0); ELSE a:= ADR(env); END;
- ASSEMBLER
- MOVE.L a, -(SP)
- MOVE.L tail(A6), -(SP)
- MOVE.L name(A6), -(SP)
- MOVE.W mode(A6), -(SP)
- MOVE.W #75, -(SP)
- TRAP #1
- LEA $10(SP), SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Pexec;
-
- PROCEDURE Pterm (code: sINTEGER);
- BEGIN
-
- ASSEMBLER
- MOVE.W code(A6), -(SP)
- MOVE.W #76, -(SP)
- TRAP #1
- END;
-
-
-
-
- END Pterm;
-
- PROCEDURE Fsfirst (REF name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W attr(A6), -(SP)
- MOVE.L name(A6), -(SP)
- MOVE.W #78, -(SP)
- TRAP #1
- ADDQ.L #8, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Fsfirst;
-
- PROCEDURE Fsnext (): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.W #79, -(SP)
- TRAP #1
- ADDQ.L #2, SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Fsnext;
-
- PROCEDURE Frename (REF curr, new: ARRAY OF CHAR): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L new(A6), -(SP)
- MOVE.L curr(A6), -(SP)
- MOVE.W #0, -(SP)
- MOVE.W #86, -(SP)
- TRAP #1
- LEA $C(SP), SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Frename;
-
- PROCEDURE Fdatime (handle: sINTEGER; VAR buff: ARRAY OF LOC; set: BOOLEAN);
- BEGIN
- IF set THEN c:= 1; ELSE c:= 0; END;
-
- ASSEMBLER
- MOVE.W c, -(SP)
- MOVE.W handle(A6), -(SP)
- MOVE.L buff(A6), -(SP)
- MOVE.W #87, -(SP)
- TRAP #1
- LEA $A(SP), SP
- END;
-
-
-
-
- END Fdatime;
-
- PROCEDURE Mxalloc (bytes: lCARDINAL; mode: sINTEGER): ADDRESS;
- BEGIN
-
- ASSEMBLER
- MOVE.W mode(A6), -(SP)
- MOVE.L bytes(A6), -(SP)
- MOVE.W #68, -(SP)
- TRAP #1
- ADDQ.L #8, SP
- MOVE.L D0, a
- END;
- RETURN a;
-
-
-
-
- END Mxalloc;
-
- PROCEDURE Maddalt (start: ADDRESS; size: lCARDINAL): sINTEGER;
- BEGIN
-
- ASSEMBLER
- MOVE.L size(A6), -(SP)
- MOVE.L start(A6), -(SP)
- MOVE.W #20, -(SP)
- TRAP #1
- LEA $A(SP), SP
- MOVE.W D0, i
- END;
- RETURN i;
-
-
-
-
- END Maddalt;
-
- PROCEDURE Flock (handle, mode: sINTEGER; start, length: lCARDINAL);
- BEGIN
-
- ASSEMBLER
- MOVE.L length(A6), -(SP)
- MOVE.L start(A6), -(SP)
- MOVE.W mode(A6), -(SP)
- MOVE.W handle(A6), -(SP)
- MOVE.W #92, -(SP)
- TRAP #1
- LEA $E(SP), SP
- END;
-
-
-
-
- END Flock;
-
- END MagicDOS.
-
-